home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / BUSINESS / STATA3.LZH / SURVIVE.TUT < prev    next >
Text File  |  1988-08-29  |  18KB  |  493 lines

  1. set output error
  2. set display page 23
  3. set more 1
  4. #delimit ;
  5.  
  6. di _n(5) in wh
  7. "  ___  ____  ____  ____  ____ tm" _n
  8. " /__    /   ____/   /   ____/" _n
  9. "___/   /   /___/   /   /___/    Survival Analysis" _n
  10. "-------------------------------------------------" _n(2) ;
  11.  
  12.  
  13. di in gr
  14. "This tutorial provides an overview of the Stata commands for performing" _n
  15. "survival analysis, including the estimation of Cox proportional-hazards models"
  16. _n "via maximum-likelihood techniques.  The commands we will discuss are:" _n(2)
  17. in wh
  18. _col(18) "cox        coxvar     loglogs    survcurv" _n
  19. _col(18) "coxbase    gwood      logrank    survsum" _n
  20. _col(18) "coxhaz     kapmeier   mantel     wilcoxon" _n ;
  21.  
  22. di in gr
  23. "We will draw some graphs during this tutorial.  If your computer and monitor"
  24. _n
  25. "do not have graphics capabilities, you won't be able to see them, and that's"
  26. _n
  27. "too bad, but nothing will go wrong." _n(2)
  28. "If you are using a Sun computer with SunView, we recommend that before run-"
  29. _n
  30. "ning this tutorial, you type '"
  31. in wh "window define tut" in gr "'.  If you typed that when" _n
  32. "you ran the graphics tutorial, you needn't type it again.  If you haven't" _n
  33. "yet typed it, break out of this tutorial by holding down "
  34. in wh "Ctrl" in gr " and pressing" _n
  35. in wh "C" in gr ", type the command, and then restart this tutorial." _n ;
  36.  
  37. #delimit cr
  38. mac def path
  39. capture run nullfile.tut
  40. if _rc {
  41.     mac def path "\stata\"
  42.     capture run %path`nullfile.tut
  43.     if _rc {
  44.         mac def path "/usr/stata/"
  45.         capture run %path`nullfile.tut
  46.         if _rc {
  47.             #delimit ;
  48.             di in red
  49. "I cannot find the other tutorial files.  I have looked in the current" _n
  50. "directory and in \stata (DOS) or /usr/stata (Unix).  Is Stata installed" _n
  51. "correctly?" _n(2)
  52. "In any case, I cannot run the tutorial." ;
  53.             #delimit cr
  54.             exit
  55.         }
  56.     }
  57. }
  58. macro define F5 "do %path`contents.tut;"
  59. macro define F6 "do %path`survive.tut;"
  60.  
  61. #delimit ;
  62. set more 0 ; more ; set more 1 ;
  63.  
  64.  
  65. di _n(2) in wh _dup(79) "-" _n in gr
  66. "We begin with the " in wh "cox" in gr
  67. " command.  " in wh "cox" in gr " can estimate proportional-hazards models" _n
  68. "on duration data, on censored duration data, and with time-varying regres-" _n
  69. "sors.  We have some data from an experiment comparing generators with old-" _n
  70. "and new-style bearings.  Generators were run under various overload condi-" _n
  71. "tions until they failed and the time, in hours, was recorded.  We'll show" _n
  72. "you our data:"_n
  73. in wh _dup(79) "-" _n(4)
  74. ". use %path`kva, clear" ;
  75. noisily use %path`kva, clear ;
  76. di _n in wh ". describe" ;
  77. noisily describe ;
  78. set more 0 ; more ; set more 1 ;
  79. di _n in wh ". list" ;
  80. noisily list ;
  81. set more 0 ; more ; set more 1 ;
  82.  
  83. di _n(2) in wh _dup(79) "-" _n in gr
  84. "All of Stata's estimation commands share the same syntax:" _n(2)
  85. _col(13) "<estimation-command>  lhsvar  rhsvar1  rhsvar2 ..." _n(2)
  86. "In the case of "
  87. in wh "cox" in gr ", the left-hand-side variable is the time-until-failure" _n
  88. "variable, so the syntax is:" _n(2)
  89. _col(13) in wh "cox "
  90. in gr "time-var  rhsvar1  rhsvar2 ..." _n(2)
  91. "We wish to estimate a model of 'failtime' on 'load' and 'bearings':" _n
  92. in wh _dup(79) "-" _n(12)
  93. ". cox failtime load bearings" ;
  94. set more 0 ; more ; set more 1 ;
  95. noisily cox failtime load bearings ;
  96. di _n ; set more 0 ; more ; set more 1 ;
  97.  
  98. di _n(2) in wh _dup(79) "-" _n in gr
  99. "Just as "
  100. in wh "cox" in gr
  101. " shares the same syntax with Stata's other estimation commands," _n
  102. in wh "cox" in gr
  103. " shares the same capabilities.  After estimating the model, for instance,"
  104. _n
  105. "we can view the inverse information matrix either as a correlation matrix or"
  106. _n
  107. "a covariance matrix:" _n
  108. in wh _dup(79) "-" _n(2)
  109. ". correlate, _coef" ;
  110. noisily correlate, _coef ;
  111. di _n in wh ". correlate, _coef covariance" ;
  112. noisily correlate, _coef cov;
  113. di _n(2) ; set more 0 ; more ; set more 1 ;
  114.  
  115. di _n(2) in wh _dup(79) "-" _n in gr
  116. "We can review the estimates by typing '"
  117. in wh "cox" in gr "' without arguments:" _n
  118. in wh _dup(79) "-" _n(6)
  119. ". cox" ;
  120. noisily cox ;
  121. di _n ; set more 0 ; more ; set more 1 ;
  122.  
  123. di _n(2) in wh _dup(79) "-" _n
  124. "cox" in gr
  125. " can also estimate models with censored observations.  We have another" _n
  126. "data set recording the results of a drug trial." _n
  127. in wh _dup(79) "-" _n(8)
  128. ". use %path`cancer, clear" ;
  129. noisily use %path`cancer, clear ;
  130. di _n in wh ". describe" ;
  131. noisily describe ;
  132. set more 0 ; more ; set more 1 ;
  133.  
  134.  
  135. di _n(2) in wh _dup(79) "-" _n in gr
  136. "In this case, some of the observations are censored -- not all the patients"
  137. _n
  138. "have yet died.  Our time variable, studytim, records the time of death or,"
  139. _n
  140. "if the patient still lives, the time of the end of the experiment.  Another"
  141. _n
  142. "variable, died, records whether the patient died." _n
  143. in wh _dup(79) "-" _n ;
  144. set more 0 ; more ; set more 1 ;
  145.  
  146. di _n(2) in wh _dup(79) "-" _n in gr
  147. "Before launching into estimation, let's examine our data:" _n
  148. in wh _dup(79) "-" _n(3)
  149. ". tabulate died, summarize(studytim)" ;
  150. noisily tabulate died, summ(studytim) ;
  151. di _n(2) in wh _dup(79) "-" _n in gr
  152. "Some 17 of our 48 patients are still alive and, not surprisingly, their" _n
  153. "survival times are longer than those who died." _n
  154. in wh _dup(79) "-" _n(2) ;
  155. set more 0 ; more ; set more 1 ;
  156.  
  157. di _n(4) in wh ". tabulate drug, summarize(studytim), if died" ;
  158. noisily tabulate drug, summ(studytim), if died ;
  159. di _n(2) in wh _dup(79) "-" _n in gr
  160. "Among the patients who died, and whose survival times are therefore complete,"
  161. _n
  162. "we see evidence that drug 2 is better than drug 1 and that drug 3 is better" _n
  163. "than drug 2." _n
  164. in wh _dup(79) "-" _n(3) ;
  165. set more 0 ; more ; set more 1 ;
  166.  
  167. di _n in wh ". tabulate drug, summarize(died)" ;
  168. noisily tab drug, summ(died) ;
  169. di _n(3) in wh _dup(79) "-" _n in gr
  170. "Looking at the fraction of patients who died, we see that drug 1 looks re-" _n
  171. "markably ineffective.  Thus, both the completed survival times and fraction"
  172. _n
  173. "of patients who died seem to be telling the same story." _n
  174. in wh _dup(79) "-" _n(3) ;
  175. set more 0 ; more ; set more 1 ;
  176.  
  177. di _n(2) in wh _dup(79) "-" _n in gr
  178. "We wish to estimate a model of the form:" _n(2)
  179. _col(8) "         Probability of dying between times t and t+dt" _n
  180. _col(8) "h(t) =   ---------------------------------------------" _n
  181. _col(8) "           (dt) (Probability of dying after time t)" _n(2)
  182. _col(8) "     =  h (t) exp( b age + b drug  + b drug )" _n
  183. _col(8) "         0          1       2    2    3    3" _n(2)
  184. "To account for the censoring, we add the "
  185. in wh "dead()" in gr " option to the end of the " in wh "cox" _n in gr
  186. "command.  "
  187. in wh "dead()" in gr " alerts " in wh "cox" in gr
  188. " that there is censoring and provides the name" _n
  189. "of the variable that indicates whether the patient is dead or alive.  So, we"
  190. _n
  191. "type:" _n ;
  192.  
  193. di in wh _col(8) "cox studytim age drug2 drug3, dead(died)" _n(2)
  194. in gr
  195. "This would be fine, except that we don't yet have indicator variables for the"
  196. _n
  197. "drug=2 and drug=3 groups.  Making indicator variables from categorical vari-"
  198. _n
  199. "ables is easy in Stata:" _n
  200. in wh _dup(79) "-" _n(2)
  201. ". quietly tabulate drug, gen(drug)" ;
  202. tabulate drug, gen(drug) ;
  203. set more 0 ; more ; set more 1 ;
  204. di _n in wh ". describe" ;
  205. noisily describe ;
  206. di _n in wh ". cox studytim age drug2 drug3, dead(died)" ;
  207. set more 0 ; more ; set more 1 ;
  208. noisily cox studytim age drug2 drug3, dead(died) ;
  209. di _n ;
  210. set more 0 ; more ; set more 1 ;
  211.  
  212. di _n(2) in wh _dup(79) "-" _n in gr
  213. "We find that both drug 2 and drug 3 are statistically different from drug 1."
  214. _n
  215. "We might now ask whether drug 2 is different from drug 3:" _n
  216. in wh _dup(79) "-" _n(3)
  217. ". test drug2=drug3" ;
  218. noisily test drug2=drug3 ;
  219. di _n in wh _dup(79) "-" _n in gr
  220. "You can learn more about the "
  221. in wh "test" in gr " command in regress.tut and probit.tut." _n
  222. "Everything said there applies with equal force after "
  223. in wh "cox" in gr " estimation." _n
  224. in wh _dup(79) "-" _n(3) ;
  225. set more 0 ; more ; set more 1 ;
  226.  
  227. di _n(2) in wh _dup(79) "-" _n
  228. in wh "cox" in gr
  229. " also has the ability to estimate models with time-varying regressors." _n
  230. "There is so much more we want to cover, however, that we will not illustrate"
  231. _n
  232. "that capability here.  It is covered in great detail in the manual and you" _n
  233. "can even find an example in the on-line help file.  If you are interested," _n
  234. "type '"
  235. in wh "help cox" in gr "' at the conclusion of this tutorial." _n
  236. in wh _dup(79) "-" _n(13) ;
  237. set more 0 ; more ; set more 1 ;
  238.  
  239. drop drug1 drug2 drug3 ;
  240.  
  241. di _n(2) in wh
  242. "Survive.Kit" _n
  243. "-----------" _n ;
  244.  
  245. di in gr
  246. "Survive.Kit adds the following commands to Stata:" _n(2)
  247. _col(8) in wh "kapmeier" in gr _col(20) "Kaplan-Meier survival curves" _n
  248. _col(8) in wh "gwood" in gr _col(20)
  249. "Kaplan Meier survival curves with Greenwood confidence bands" _n
  250. _col(8) in wh "loglogs" in gr _col(20)
  251. "diagnostic plots for the exponential & Weibull distributions" _n(2)
  252. _col(8) in wh "survsum" in gr _col(20) "display survival summary statistics" _n
  253. _col(8) in wh "survcurv" in gr _col(20) "create survival variables" _n ;
  254. di in gr
  255. _col(8) in wh "logrank" in gr _col(20)
  256. "log-rank test for two or more groups" _n
  257. _col(8) in wh "mantel" in gr _col(20) "Mantel-Haenszel test for two groups" _n
  258. _col(8) in wh "wilcoxon" in gr _col(20)
  259. "Wilcoxon-Gehan test for two groups" _n(2)
  260. _col(8) in wh "coxhaz" in gr _col(20) "graph the baseline hazard after "
  261. in wh "cox" in gr _n
  262. _col(8) in wh "coxbase" in gr _col(20)
  263. "graph the baseline survival curve after "
  264. in wh "cox" in gr _n
  265. _col(8) in wh "coxvar" in gr _col(20)
  266. "create baseline survival variables after "
  267. in wh "cox" in gr _n ;
  268.  
  269. di in gr
  270. "Before we can continue, we must load Survive.Kit:" _n(2)
  271. in wh ". run %path`Survive.Kit" ;
  272. set more 0 ; more ; set more 1 ;
  273. run %path`Survive.Kit ;
  274.  
  275. di _n in wh _dup(79) "-" _n in gr
  276. "Unfortunately, if you are running the demonstration version of Stata, we could"
  277. _n
  278. "not provide you with the full version of Survive.Kit.  We had to omit the" _n
  279. in wh "gwood" in gr ", "
  280. in wh "kapmeier" in gr ", "
  281. in wh "logrank" in gr ", "
  282. in wh "mantel" in gr ", "
  283. in wh "survsum" in gr ", and "
  284. in wh "wilcoxon" in gr " commands.  These" _n
  285. "commands need to write temporary data sets in the process of making their" _n
  286. "calculations, and the demonstration version of Stata lacks that capability." _n
  287. "In the demonstration version, these commands are merely stubs that say " _n
  288. "'"
  289. in ye "not available in demonstration version" in gr
  290. "' if you try to use them." _n
  291. in wh _dup(79) "-" _n(2) ;
  292. set more 0 ; more ; set more 1 ;
  293.  
  294. di _n(2) in wh _dup(79) "-" _n in gr
  295. "By the same token, if you are using the Unix version of Stata in demonstration"
  296. _n
  297. "mode, these commands will not work.  They are not, however, stubs that do" _n
  298. "nothing; they are the real version and will fail." _n(2)
  299. "To get around these problems in this tutorial, we will simulate their output,"
  300. _n
  301. "making it look as if they ran fine."  _n
  302. in wh _dup(79) "-" _n(3) ;
  303. set more 0 ; more ; set more 1 ;
  304.  
  305.  
  306. di _n(2) in white
  307. "Command Syntax" _n
  308. "--------------" _n ;
  309.  
  310. di in gr
  311. "All the Survive.Kit commands have essentially the same syntax:" _n(2)
  312. _col(16) "<command> timevar deadvar [" in wh ", by("
  313. in gr "groupvar" in wh ")" in gr "]" _n(2)
  314. "timevar is the name of the variable recording survival time or time until" _n
  315. "censoring; deadvar is the name of the variable recording 1 if the observation"
  316. _n
  317. "represents a death and 0 if it represents the last time the patient was known"
  318. _n
  319. "to be alive.  Not all commands allow the "
  320. in wh "by()" in gr " option (because it does not make" _n
  321. "sense) and a few require it (for the same reason).  Some commands allow other"
  322. _n
  323. "options as well." _n ;
  324.  
  325. di in gr
  326. "You can type '"
  327. in wh "help Survive.Kit" in gr "' at the end of this tutorial for complete de-"
  328. _n
  329. "tails on syntax." _n(2)
  330. "We are not going to give examples of all the Survive.Kit commands -- there"
  331. _n
  332. "are too many!  But we will show a few of Survive.Kit's capabilities." _n(4) ;
  333. set more 0 ; more ; set more 1 ;
  334.  
  335.  
  336. di _n(13) in wh _dup(79) "-" _n in gr
  337. "The "
  338. in wh "kapmeier" in gr
  339. " command graphs the Kaplan-Meier survival curve.  Let's take a" _n
  340. "look using our drug trial data.  (If your computer does not have graphics" _n
  341. "capabilities, these commands won't do anything.)" _n
  342. in wh _dup(79) "-" _n(2)
  343. ". kapmeier studytim died" ;
  344. set more 0 ; more ;
  345. graph using %path`kapm ;
  346. set more 1 ;
  347. di in wh _n ". kapmeier studytim died, by(drug)" ;
  348. set more 0 ; more ;
  349. graph using %path`kapm2 ;
  350. set more 1 ;
  351.  
  352. di _n(2) in wh _dup(79) "-" _n in gr
  353. "Adding Greenwood confidence bands is easy:" _n
  354. in wh _dup(79) "-" _n(2)
  355. ". gwood studytim died" ;
  356. set more 0 ; more ;
  357. graph using %path`gw ;
  358. set more 1 ;
  359.  
  360. di _n in wh
  361. ". gwood studytim died, by(drug)" ;
  362. set more 0 ; more ;
  363. graph using %path`gw2 ;
  364. set more 1 ;
  365.  
  366. di _n(4) in wh _dup(79) "-" _n in gr
  367. "The " in wh "survsum" in gr
  368. " command displays summary statistics -- number of observations," _n
  369. "number of deaths, median survival time, mean survival time -- for the sample."
  370. _n
  371. "The estimated median survival is based on the nonparametric Kaplan-Meier" _n
  372. "survival curve.  The mean survival is based on the assumption of an exponen-"
  373. _n
  374. "tial distribution that takes censoring into account." _n
  375. in wh _dup(79) "-" _n(2)
  376. " . survsum studytim died" ;
  377. di _n in gr
  378. "Group      Cases      Died       Median     Mean" _n
  379. "-------------------------------------------------------" _n
  380. in ye "Total      48         31         17         24" ;
  381. di _n in wh ". survsum studytim died, by(drug)" ;
  382. di _n in gr
  383. "Group      Cases      Died       Median     Mean" _n
  384. "-------------------------------------------------------" _n
  385. in ye
  386. "1          20         19         8          9.4736843" _n
  387. "2          14         6          22         34.833332" _n
  388. "3          14         6          33         59.166668" _n
  389. "Total      48         31         .          ." _n  ;
  390. set more 0 ; more ; set more 1 ;
  391.  
  392. di _n(13) in wh _dup(79) "-" _n in gr
  393. "The "
  394. in wh "loglogs" in gr
  395. " command produces a graph of log(-log(S(t))) vs. log(t), where" _n
  396. "S(t) is the survivor function defined by the Kaplan-Meier product-limit" _n
  397. "estimate." _n(2)
  398. "If the resulting curve is a straight line, the data may be assumed to come" _n
  399. "from a Weibull distribution." _n
  400. in wh _dup(79) "-" _n(2)
  401. ". loglogs studytim died" ;
  402. set more 0 ; more ;
  403. noisily loglogs studytim died, ylabel xlabel ;
  404. set more 1 ;
  405.  
  406. di _n in wh ". loglogs studytim died, by(drug)" ;
  407. set more 0 ; more ;
  408. noisily loglogs studytim died, by(drug) bsize(125) ylabel xlabel border ;
  409. set more 1 ;
  410.  
  411. di _n(7) in wh _dup(79) "-" _n in gr
  412. "The "
  413. in wh "survcurv" in gr " command adds three new variables to your data:" _n(2)
  414. in wh _col(8) "_surv" _col(20) in gr
  415. "the Kaplan-Meier product-limit estimates" _n
  416. _col(8) in wh "_stds" _col(20) in gr
  417. "the Greenwood standard deviation of the survival curve" _n
  418. in wh _col(8) "_vlogs" in gr
  419. _col(20) "the variance of the log survival" _n(2)
  420. "Other programs in Survive.Kit use "
  421. in wh "survcurv" in gr " as a utility routine and you may" _n
  422. "find it useful when you wish to design custom graphs or make custom estimates."
  423. ;
  424.  
  425. di in gr
  426. "For instance, for the Weibull distribution, we know that" _n(2)
  427. _col(8) "log(-log(S(t))) = -log(lambda) + p log(t)" _n(2)
  428. "where S(t) is the survival function.  Using the variables produced by "
  429. in wh "survcurv" _n in gr
  430. "and linear regression, we can estimate the parameters of the Weibull:" _n
  431. in wh _dup(79) "-" _n(2)
  432. ". survcurv studytim died" ;
  433. noisily survcurv studytim died ;
  434. set more 0 ; more ; set more 1 ;
  435. di _n in wh ". gen loglogs = log(-log(_surv))" ;
  436. gen loglogs = log(-log(_surv)) ;
  437. di _n in wh ". gen logt = log(studytim)" ;
  438. gen logt = log(studytim) ;
  439. di _n in wh ". regress loglogs logt" ;
  440. set more 0 ; more ; set more 1 ;
  441. noisily regress loglogs logt ;
  442. di _n ; set more 0 ; more ; set more 1 ;
  443.  
  444. di _n(4) in wh _dup(79) "-" _n in gr
  445. "The " in wh "logrank" in gr
  446. " command calculates the log-rank statistic for comparing survival"
  447. _n
  448. "curves of two or more groups:" _n
  449. in wh _dup(79) "-" _n(2)
  450. ". logrank studytim died, by(drug)" ;
  451. di _n in gr
  452. "Group            Events            Predicted" _n
  453. "--------------------------------------------" _n
  454. in ye
  455. "1                19                7.2459559" _n
  456. "2                6                 8.1984653" _n
  457. "3                6                 15.555579" _n(2)
  458. in gr
  459. "Chi2( " in ye "2" in gr " ) =  " in ye "25.526241" in gr " , P =  "
  460. in ye "2.864e-06" _n ;
  461.  
  462. di _n in wh _dup(79) "-" _n in gr
  463. "The results indicate that the three groups are indeed different; the P-value"
  464. _n
  465. "is less than 0.1%.  Note that there are 19+6+6=31 deaths occurring (labeled" _n
  466. "events) and 31 deaths predicted (which is perhaps not so obvious).  For the" _n
  467. "control group (group 1), there are 19 observed deaths, but only 7.25 would" _n
  468. "be expected if all patients had the same survival rate." _n
  469. in wh _dup(79) "-" _n ;
  470. set more 0 ; more ; set more 1 ;
  471.  
  472. drop _all ;
  473. label drop _all ;
  474. macro define F6 "do %path`statkit.tut;" ;
  475.  
  476. di _n(4) in white
  477. "Demonstration ends" _n
  478. "------------------" _n ;
  479.  
  480.  
  481. di in green
  482. "That concludes our short demonstration, but there's much more.  We now return"
  483. _n
  484. "control to you.  Some suggestions:" _n ;
  485.  
  486. di in green
  487. "If you ..." _col(34) "Then we will show you ..." _n
  488. "    Press " in white "F5" in green _col(38) "a table of tutorial contents" _n
  489. "    Press " in white "F6" in green _col(38) "the next tutorial, "
  490. in white "statkit.tut" _n ;
  491.  
  492. run %path`tobuy.tut ;
  493.